#include "ThreadPool.hpp"
#include "Thread.hpp"
#include <stdlib.h>
#include <time.h>
#include <stdio.h>
#include <unistd.h>
#include <memory>

using std::unique_ptr;

class MyTask{
public:
    MyTask(){
        srand(time(NULL));
    }

    void process(){
        int num = rand() % 100;
        printf("num = %d\n",num);
        sleep(1);
    }
};

int main()
{
    tp::ThreadPool threadpool(4,10);
    threadpool.start();

    //01 创建堆对象，智能指针托管，但要关注其生命周期
    /* unique_ptr<MyTask> task(new MyTask); */ 

    int cnt = 20;
    while(cnt-- >0){
        //使用.get()获取原生指针
        /* threadpool.addTask(std::bind(&MyTask::process,task.get())); */

        //02 直接创建一个临时变量,std::bind默认会走拷贝构造
        //   建议使用这种方式
        threadpool.addTask(std::bind(&MyTask::process,MyTask()));
        
    }

    threadpool.stop();

    return 0;
}

